实战-Docker方式安装Jenkins-20230319-测试成功-荐
Day2-实战:Docker方式安装Jenkins-2023.3.19(测试成功)-荐
目录
[toc]
实验环境
win10笔记本
1台虚机 centos7.6 1810 vmworkstation
jenkins/jenkins:2.346.3-2-lts-jdk11
docker 20.10.21
1台linux虚机(Jenkins用docker启动,agent直接跑在宿主机上。)
实验软件(无)
前置条件
docker环境已安装(本次版本:20.10.21)
安装好jdk11
Jenkins是由Java语言开发的,运行需要提前安装好JDK。注意最新版本之后不在兼容JDK8而是需要JDK11+版本。
Jenkins Server和Agent的运行都需要依赖JDK;(Jenkins是docker安装的,其环境里自带了java,但是jenkins agent环境也是需要安装jdk的,因此这里的测试虚机就需要安装jdk11了。)
1、安装Jenkins Server
0.安装jdk环境
⚠️ 我的测试环境,是在一台虚机上跑了一个jenkins容器。但后面添加一个jenkins agent时,是将这个虚机作为其agent使用,因此这个虚机也要安装java环境的!!!
不管你是jenkins master节点,还是agent节点,都是需要jdk环境的!
#安装
[root@Devops6 ~]#yum install -y java-11-openjdk.x86_64
……
Installed:
java-11-openjdk.x86_64 1:11.0.18.0.10-1.el7_9
Dependency Installed:
copy-jdk-configs.noarch 0:3.3-11.el7_9 cups-libs.x86_64 1:1.6.3-51.el7 dejavu-fonts-common.noarch 0:2.33-6.el7 dejavu-sans-fonts.noarch 0:2.33-6.el7
fontconfig.x86_64 0:2.13.0-4.3.el7 fontpackages-filesystem.noarch 0:1.44-8.el7 giflib.x86_64 0:4.1.6-9.el7 graphite2.x86_64 0:1.3.10-1.el7_3
harfbuzz.x86_64 0:1.7.5-2.el7 java-11-openjdk-headless.x86_64 1:11.0.18.0.10-1.el7_9 javapackages-tools.noarch 0:3.4.1-11.el7 libICE.x86_64 0:1.0.9-9.el7
libSM.x86_64 0:1.2.2-2.el7 libX11.x86_64 0:1.6.7-4.el7_9 libX11-common.noarch 0:1.6.7-4.el7_9 libXau.x86_64 0:1.0.8-2.1.el7
libXext.x86_64 0:1.3.3-3.el7 libXi.x86_64 0:1.7.9-1.el7 libXrender.x86_64 0:0.9.10-1.el7 libXtst.x86_64 0:1.2.3-1.el7
libfontenc.x86_64 0:1.1.3-3.el7 libjpeg-turbo.x86_64 0:1.2.90-8.el7 libxcb.x86_64 0:1.13-1.el7 lksctp-tools.x86_64 0:1.0.17-2.el7
pcsc-lite-libs.x86_64 0:1.8.8-8.el7 python-javapackages.noarch 0:3.4.1-11.el7 python-lxml.x86_64 0:3.2.1-4.el7 ttmkfdir.x86_64 0:3.0.9-42.el7
tzdata-java.noarch 0:2022g-1.el7 xorg-x11-font-utils.x86_64 1:7.5-21.el7 xorg-x11-fonts-Type1.noarch 0:7.5-9.el7
Complete!
#验证
[root@Devops6 ~]#java --version
openjdk 11.0.18 2023-01-17 LTS
OpenJDK Runtime Environment (Red_Hat-11.0.18.0.10-1.el7_9) (build 11.0.18+10-LTS)
OpenJDK 64-Bit Server VM (Red_Hat-11.0.18.0.10-1.el7_9) (build 11.0.18+10-LTS, mixed mode, sharing)
1.docker拉取jenkins镜像并启动容器
- 下载jenkins镜像
安装Jenkins的Server节点,Server节点作为主控节点负责调度任务。
进入hub.docker.com官方的镜像仓库,下载Jenkins的镜像。
在dockerhub里搜索jenkins/jenkins
,点击tag
,搜索jdk11
,然后选择jenkins:2.346.3-2-lts-jdk11
即可:
#这里先拿到安装命令,后面将开始安装
docker pull jenkins/jenkins:2.346.3-2-lts-jdk11
DockerHUB上面有很多版本的镜像,大家根据镜像的更新时间,别找错了🌝🌝好多是4年前的…
我们使用最新LTS版本的Jenkins 2.346.3。
1、宿主机上创建Jenkins数据目录
准备一个用于存储Jenkins数据的目录。因为我们用Docker安装的,容器的数据如果没有进行持久化当容器被删除了会出现数据丢失。
我们需要把Jenkins数据目录持久化,先去创建一个本地的目录并赋予权限。
[root@Devops6 ~]#mkdir -p /data/devops6/jenkins_home
[root@Devops6 ~]#chmod 777 -R /data/devops6/jenkins_home
2、启动Jenkins容器
docker run -itd --name jenkins \
-p 8080:8080 \
-p 50000:50000 \
-e JAVA_OPTS="-Dorg.apache.commons.jelly.tags.fmt.timeZone='Asia/Shanghai" \
--privileged=true \
--restart=always \
-v /data/devops6/jenkins_home:/var/jenkins_home jenkins/jenkins:2.346.3-2-lts-jdk11
说明:
容器运行后需要开放端口。
8080默认Jenkins web页面使用的端口。
50000是Agent连接Server用到的通信端口。(后面安装JenkinsAgent的时候要注意网络连通性)
时区配置,定义默认的时区。(JAVA_OPTS环境变量为修改时间配置,否则可能jenkins的时间显示有问题!)
持久化数据目录,挂载本地的数据目录。
3、验证
启动Jenkins容器后。然后docker logs 看下日志。在日志中可以获取到激活Jenkins需要用到的密钥字符串。保存下来。
#查看jenkins容器运行状态
[root@Devops6 ~]#docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d6139736ef4c jenkins/jenkins:2.346.3-2-lts-jdk11 "/usr/bin/tini -- /u…" 5 seconds ago Up 3 seconds 0.0.0.0:8080->8080/tcp, :::8080->8080/tcp, 0.0.0.0:50000->50000/tcp, :::50000->50000/tcp jenkins
#查看jenkins容器log
[root@Devops6 ~]#docker logs jenkins
……
Jenkins initial setup is required. An admin user has been created and a password generated.
Please use the following password to proceed to installation:
315798fcf926460fb1da173032767596
This may also be found at: /var/jenkins_home/secrets/initialAdminPassword
……
2.访问web界面并输入密码
访问http://172.29.9.101:8080/开始配置Jenkins。
填写解锁密钥
- 可通过如下2种方式来获取密码:
(1)查看docker里的日志文件
[root@Devops6 ~]#docker exec jenkins cat /var/jenkins_home/secrets/initialAdminPassword
315798fcf926460fb1da173032767596
(2)查看jenkins容器日志
[root@Devops6 ~]#docker logs jenkins
……
Jenkins initial setup is required. An admin user has been created and a password generated.
Please use the following password to proceed to installation:
315798fcf926460fb1da173032767596
This may also be found at: /var/jenkins_home/secrets/initialAdminPassword
……
- 输入密码后,这边的加载一会儿,耐心等一会儿:
加载完成后,出现如下界面:
3.自定义安装插件
- 点击
选择插件来安装
:
点击无
,我们先不安装插件,待后续根据需求再安装相应的插件即可:
- 插件安装完成后,出现如下界面:
- 自定义安装插件,这里取消安装推荐的插件。只选择语言插件进行安装(本次也不打算安装汉化插件,直接使用jenkins的英文界面了)。(此处不应安装太多的插件,可能会出现网络原因导致安装失败。我们先安装好Jenkins后面用到哪些插件的时候再选择性的安装好)
安装进度也可以通过docker logs查询日志获取。
4.创建一个管理员用户
- 账户:admin 密码:admin ,输入完成后,点击
保存并完成
:
- 点击
保存并完成
:
- 点击
开始使用jenkins
:
这里就进入到了jenkins的主界面:
5、配置Jenkins插件源
1.本次新版本的插件源好像是不用变的
当前jenkins版本:jenkins/jenkins:2.346.3-2-lts-jdk11
- Jenkins插件源配置地方
https://updates.jenkins.io/update-center.json
- 如何测试这个源是否可以正常使用
如果在自己浏览器里可以正常访问到这个url的话,那么就证明这个插件源是可以被正常使用的。
https://updates.jenkins.io/update-center.json
可以看到,当前这个插件源是可以被正常使用的。
- 另外,也可以在
Available
点击这里的check now
,如果出现可用的插件的话,那么就说明这个插件源是可用的。
2.如果是内网机器,可以考虑使用nexus3做一个代理
企业如果限制外网访问,需要通过Nexus代理仓库的方式缓存到内网;
如果是内网机器,可以考虑使用nexus3做一个代理,将这里的url换成代理nexus3的地址。
3.手动上传插件
- Jenkins上传插件位置
- Jenkins插件下载位置
4.更改插件源的方法
这个测试的jenkins版本为:jenkins/jenkins:2.332.2-centos7-jdk8
可以使用aliyun、清华源中的插件源;
可以使用Jenkins中文社区中的插件源;
- jenkins官方中文社区源当时测试在这个jenkins版本下用不了!
按老师提供的这个方法,貌似这个源地址对这个版本的jenkins是失效了:。。。(老师也是没测试出来。。。,最后直接更换清华源了!)
- 因此这里进行更换清华源:
输入清华源链接地址
:https://mirrors.tuna.tsinghua.edu.cn/
点击updates
:
看下自己当前jenkins版本:Jenkins 2.332.2)
这里没有Jenkins 2.332.2
,用相近的版本也行:
点击update-center.json
,然后复制其链接地址即可:
https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/dynamic-stable-2.332.1/update-center.json
- 得到清清华源地址后,我们再次按上面方式进行配置
https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/dynamic-stable-2.332.1/update-center.json
验证,点击立即获取
:
可以看到,这个源地址是可以用的:
2、安装配置Jenkins Agent
agent就是真正去执行任务的节点。
1.新建节点,并填写参数配置
- 首先,我们需要在JenkinsServer上面添加节点。
点击Manege Jenkins
-Manage Nodes and Clouds
:
点击+ New Node
:
填写Node name
,Type选择Permanent Agent
,点击Create
:
配置执行器数量
,远程工作目录
,标签
,Usage
内容,其余不变,填写完成后,点击保存:
⚠️
Number of executors
你可以这样理解,我在jenkins上运行一个job,它就会占用一个执行器。它所运行作业的数量,作业的并发数。 所以你在调并发的时候,如果出现队列在排队的情况,那可能是因为这里的执行器数量设置不够!
点击Save
后,就可以看到创建好的agent节点了:
- 另外:如果这里配置了
自定义工作目录的话
,那么这里的值就会替代上面我们指定的远程工作目录
!
2.获取agent启动程序并运行agent
- 在首页点击刚才新建的节点
build01
:
- 这里agent有2种方式可以连接到jenkins master,我们使用第二种方式:
echo 0af95ad221aa67897c9cb50ebc57bee4c1cb49e7f8bb42fb65b835cabcae2303 > secret-file
java -jar agent.jar -jnlpUrl http://172.29.9.101:8080/computer/build01/jenkins-agent.jnlp -secret @secret-file -workDir "/opt/jenkinsagent"
- 右键复制
agent.jar
包,稍后在我们的虚机里将其下载下来:
http://172.29.9.101:8080/jnlpJars/agent.jar
- 创建agent目录并下载
agent.jar
包:
[root@Devops6 ~]#cd /data/devops6/
[root@Devops6 devops6]#ls
jenkins_home
[root@Devops6 devops6]#mkdir jenkins_agent
[root@Devops6 devops6]#cd jenkins_agent/
[root@Devops6 jenkins_agent]#wget http://172.29.9.101:8080/jnlpJars/agent.jar
--2023-03-19 22:37:29-- http://172.29.9.101:8080/jnlpJars/agent.jar
Connecting to 172.29.9.101:8080... connected.
HTTP request sent, awaiting response... 200 OK
Length: 1522481 (1.5M) [application/java-archive]
Saving to: ‘agent.jar’
100%[================================================================================================================================================================>] 1,522,481 --.-K/s in 0.04s
2023-03-19 22:37:29 (38.6 MB/s) - ‘agent.jar’ saved [1522481/1522481]
[root@Devops6 jenkins_agent]#ll
total 1488
-rw-r--r-- 1 root root 1522481 Mar 19 18:27 agent.jar
- 编写启动脚本:
[root@Devops6 jenkins_agent]#pwd
/data/devops6/jenkins_agent
[root@Devops6 jenkins_agent]#echo 0af95ad221aa67897c9cb50ebc57bee4c1cb49e7f8bb42fb65b835cabcae2303 > secret-file
[root@Devops6 jenkins_agent]#vim start.sh #将刚才网页出现的第二种方式的代码拷贝进去
#!/bin/bash
java -jar agent.jar -jnlpUrl http://172.29.9.101:8080/computer/build01/jenkins-agent.jnlp -secret @secret-file -workDir "/opt/jenkinsagent"
- 启动脚本并查看:
[root@Devops6 jenkins_agent]#pwd
/data/devops6/jenkins_agent
[root@Devops6 jenkins_agent]#ls
agent.jar start.sh
[root@Devops6 jenkins_agent]#sh start.sh
Mar 19, 2023 10:39:45 PM org.jenkinsci.remoting.engine.WorkDirManager initializeWorkDir
INFO: Using /opt/jenkinsagent/remoting as a remoting work directory
Mar 19, 2023 10:39:45 PM org.jenkinsci.remoting.engine.WorkDirManager setupLogging
INFO: Both error and output logs will be printed to /opt/jenkinsagent/remoting
Mar 19, 2023 10:39:45 PM hudson.remoting.jnlp.Main createEngine
INFO: Setting up agent: build01
Mar 19, 2023 10:39:45 PM hudson.remoting.jnlp.Main$CuiListener <init>
INFO: Jenkins agent is running in headless mode.
Mar 19, 2023 10:39:45 PM hudson.remoting.Engine startEngine
INFO: Using Remoting version: 4.13.3
Mar 19, 2023 10:39:45 PM org.jenkinsci.remoting.engine.WorkDirManager initializeWorkDir
INFO: Using /opt/jenkinsagent/remoting as a remoting work directory
Mar 19, 2023 10:39:45 PM hudson.remoting.jnlp.Main$CuiListener status
INFO: Locating server among [http://172.29.9.101:8080/]
Mar 19, 2023 10:39:46 PM org.jenkinsci.remoting.engine.JnlpAgentEndpointResolver resolve
INFO: Remoting server accepts the following protocols: [JNLP4-connect, Ping]
Mar 19, 2023 10:39:46 PM hudson.remoting.jnlp.Main$CuiListener status
INFO: Agent discovery successful
Agent address: 172.29.9.101
Agent port: 50000 #注意这里
Identity: 3a:67:65:d5:5b:d8:e5:f4:fa:4b:1a:9c:93:d9:36:0d
Mar 19, 2023 10:39:46 PM hudson.remoting.jnlp.Main$CuiListener status
INFO: Handshaking
Mar 19, 2023 10:39:46 PM hudson.remoting.jnlp.Main$CuiListener status
INFO: Connecting to 172.29.9.101:50000
Mar 19, 2023 10:39:46 PM hudson.remoting.jnlp.Main$CuiListener status
INFO: Trying protocol: JNLP4-connect
Mar 19, 2023 10:39:46 PM org.jenkinsci.remoting.protocol.impl.BIONetworkLayer$Reader run
INFO: Waiting for ProtocolStack to start.
Mar 19, 2023 10:39:46 PM hudson.remoting.jnlp.Main$CuiListener status
INFO: Remote identity confirmed: 3a:67:65:d5:5b:d8:e5:f4:fa:4b:1a:9c:93:d9:36:0d
Mar 19, 2023 10:39:46 PM hudson.remoting.jnlp.Main$CuiListener status
INFO: Connected #注意这里
- 此时刷新下web页面,我么可以看到
bulid01 agent节点
状态正常了:
- 但是,现在有个问题,当我们把这个脚本退出后,这个agent程序就退出了:
- 此时,该怎么办呢?可以在启动脚本里修改下配置,使其脚本在后台运行:
#改进脚本
[root@Devops6 jenkins_agent]#pwd
/data/devops6/jenkins_agent
[root@Devops6 jenkins_agent]#vim start.sh
#!/bin/bash
nohup java -jar agent.jar -jnlpUrl http://172.29.9.101:8080/computer/build01/jenkins-agent.jnlp -secret @secret-file -workDir "/opt/jenkinsagent" &
#我们再次启动脚本,然后刷新网页观察现象
[root@Devops6 jenkins_agent]#sh start.sh
[root@Devops6 jenkins_agent]#nohup: appending output to ‘nohup.out’
[root@Devops6 jenkins_agent]#
[root@Devops6 jenkins_agent]#ps -aux|grep java
1000 7273 19.2 36.1 3063932 673612 pts/0 Sl+ 22:50 0:44 java -Duser.home=/var/jenkins_home -Djenkins.model.Jenkins.slaveAgentPort=50000 -Dhudson.lifecycle=hudson.lifecycle.ExitLifecycle -jar /usr/share/jenkins/jenkins.war
root 16841 15.1 6.2 3192696 115852 pts/0 Sl 22:53 0:03 java -jar agent.jar -jnlpUrl http://172.29.9.101:8080/computer/build01/jenkins-agent.jnlp -secret @secret-file -workDir /opt/jenkinsagent
root 16901 0.0 0.0 112708 976 pts/0 S+ 22:54 0:00 grep --color=auto java
- 设置开机启动脚本
⚠️ 注意:如果使用rc.local和crontab设置开机启动的话,是没有效果的;这里采用systemd方法来设置服务开机启动。
[root@Devops6 ~]#vim /etc/systemd/system/jenkins-agent.service
[Unit]
Description=Jenkins Agent service
After=network.target
[Service]
Type=simple
User=root
WorkingDirectory=/opt/jenkinsagent
ExecStart=/usr/bin/java -jar /data/devops6/jenkins_agent/agent.jar -jnlpUrl http://172.29.9.101:8080/computer/build01/jenkins-agent.jnlp -secret @/data/devops6/jenkins_agent/secret-file
Restart=on-failure
[Install]
WantedBy=multi-user.target
systemctl daemon-reload
systemctl enable jenkins-agent
重启机器后测试:(符合预期)
也是可以通过sytemctl命令来启动/重启/关停这个服务的:
systemctl start/restart jenkins-agent
systemctl stop jenkins-agent
至此,jenkins server节点和agent节点已全部安装成功。
- 此时,给虚机做一个快照哦。
测试结束。😘
关于我
我的博客主旨:
- 排版美观,语言精炼;
- 文档即手册,步骤明细,拒绝埋坑,提供源码;
- 本人实战文档都是亲测成功的,各位小伙伴在实际操作过程中如有什么疑问,可随时联系本人帮您解决问题,让我们一起进步!
🍀 微信二维码 x2675263825 (舍得), qq:2675263825。
🍀 微信公众号 《云原生架构师实战》
🍀 语雀
https://www.yuque.com/xyy-onlyone
🍀 csdn https://blog.csdn.net/weixin_39246554?spm=1010.2135.3001.5421
🍀 知乎 https://www.zhihu.com/people/foryouone
最后
好了,关于本次就到这里了,感谢大家阅读,最后祝大家生活快乐,每天都过的有意义哦,我们下期见!